<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>

    <script>

        // let  const 

        // const 用于声明常量  --- 声明出来的变量不允许修改
        // const 声明时需要立即赋值


        // let和const共同点
        //   没有预编译，都必须先声明后使用
        //   都是块级作用域
        //   在同一作用域下，变量名不能重名

        // let 声明的变量可以被改变
        // const 声明的变量不能被改变(基本类型存的是值，引用类型存的是地址)


        // 一般来说  引用类型优先使用const来声明
        //           函数优先使用const来声明(赋值式函数)



        // 总结  var  let  const

        //   最先考虑  const (考虑这个值会不会变)   函数，获取元素 ， 引用数据类型(数组，对象)
        //   其次考虑  let  会变
        //   放弃var 




        let a = 1 ;
        a++ ;
        console.log(a);

        const b = 1 ;
        // b = 2 ;
        console.log(b);


        const c = 3.14 ;


        // const d ;  
        
        // arr存的是地址
        const arr = [1,2,3] ;
        arr.push('hi') ;
        console.log(arr);


        // 相当于arr存了另一个地址
        // arr = [1,2,3,45] ;   // 报错


        let arr2 = [1,2,3] ;
        arr2 = arr2.map(function(v , i){
            return v * 2 ;
        })
        console.log(arr2);


       
        // 赋值式函数
        const rand = function(min , max) {
            return parseInt(Math.random() * (max-min)+min)
        }

        console.log(rand(0,10));



        // 没有挂载在window对象上   
        let d = 5 ;

        // console.log(window.d);   // 访问不到的



    </script>
    
</body>
</html>